unit ditte_frm;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics,
  Dialogs, StdCtrls, ExtCtrls, ZDataset, aziende_frm;

type

  { TDitte }

  TDitte = class(TForm)
    btapriaziende: TButton;
    btelimina:   TButton;
    btnuovo:     TButton;
    btsalva:     TButton;
    cbaziende: TComboBox;
    cbditte:     TComboBox;
    edDescrizione: TMemo;
    Label1:      TLabel;
    lblAziende: TLabel;
    lblDescrizione: TLabel;
    lblNote:     TLabel;
    zq_ditte:    TZQuery;
    procedure btapriaziendeClick(Sender: TObject);
    procedure bteliminaClick(Sender: TObject);
    procedure btnuovoClick(Sender: TObject);
    procedure btsalvaClick(Sender: TObject);
    procedure cbaziendeChange(Sender: TObject);
    procedure cbditteChange(Sender: TObject);
    procedure cbditteExit(Sender: TObject);
    procedure cbditteKeyPress(Sender: TObject; var Key: char);
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure LoadComboDitte();
    procedure LoadComboAziende();
    procedure ClearCampi();
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Ditte: TDitte;

implementation

{ TDitte }
procedure TDitte.FormCreate(Sender: TObject);
begin
  //seleziono tutte le ditte e le visualizzo nella combobox
  LoadComboDitte();
  //seleziono tutte le aziende e popolo le combobox
  LoadComboAziende();
  //applico i permessi in base ai ruoli
end;

procedure TDitte.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  CloseAction := cafree;
end;


procedure TDitte.btnuovoClick(Sender: TObject);
begin
  //pulisce tutti i campi per consentire un nuovo inserimento
  ClearCampi();
  cbaziende.SetFocus;
end;

procedure TDitte.btsalvaClick(Sender: TObject);
begin
  if cbaziende.ItemIndex=-1 then
  begin
    ShowMessage('Devi selezionare un''azienda valida.');
    cbaziende.SetFocus;
    exit();
  end;

  if cbditte.Text<>'' then
  begin
    ////////////////////////////////////////////////////////////////////
    ///              Modifica ditta
    ////////////////////////////////////////////////////////////////////
    with zq_ditte do
    begin
      Close;
      sql.Clear;
      sql.Add('UPDATE DITTE SET ' +
        'IDAZIENDA=:IDAZIENDA,' +
        'DESCRIZIONE=:DESCRIZIONE ' +
        'WHERE IDDITTA=:ID');
      ParamByName('IDAZIENDA').AsInteger := integer(cbaziende.Items.Objects[cbaziende.ItemIndex]);
      ParamByName('DESCRIZIONE').AsString := edDescrizione.Text;
      ParamByName('ID').AsInteger := integer(cbditte.Items.Objects[cbditte.ItemIndex]);
      ExecSQL;
      //riaggiorna la lista delle ditte nelle combo
      LoadComboDitte();
      //comunica l'esito positivo della modifica
      ShowMessage(cbaziende.Text + ' è stata modificata correttamente.');
    end;
  end
  else
  begin
    ////////////////////////////////////////////////////////////////////
    ///              INSERIMENTO DITTA
    ////////////////////////////////////////////////////////////////////
    //inserisci la nuova ditta nel DB
    with zq_ditte do
    begin
      Close;
      sql.Clear;
      sql.Add('INSERT INTO DITTE (' + 'IDAZIENDA,' +
        'DESCRIZIONE' +
        ') VALUES (:IDAZIENDA,:DESCRIZIONE)');
      ParamByName('IDAZIENDA').AsInteger  := integer(cbaziende.Items.Objects[cbaziende.ItemIndex]);
      ParamByName('DESCRIZIONE').AsString := edDescrizione.Text;
      ExecSQL;
      //riaggiorna la lista delle ditte
      LoadComboDitte();
      //comunica l'esito positivo dell'inserimento
      ShowMessage(cbaziende.Text + ' è ora abilitata per utilizzare il software.');
    end;
  end;
  btnuovoClick(self);
end;

procedure TDitte.bteliminaClick(Sender: TObject);
var
  buttonSelected: integer;
begin

  //controllo che sia stata selezionata una ditta sennò avverto
  //che è necessario selezionarne una
  if cbDitte.ItemIndex <> -1 then
  begin
    //chiede conferma e poi cancella il record
    buttonSelected := MessageDlg(
      'Si sta per togliere i privilegi di utilizzo del software a ' + cbditte.Text +
      '. Continuare?', mtInformation, mbOKCancel, 0);
    if buttonSelected = mrOk then
    begin
      with zq_ditte do
      begin
        Close;
        sql.Clear;
        sql.Add('DELETE FROM DITTE WHERE IDDITTA=:ID');
        ParamByName('ID').AsInteger := integer(cbditte.Items.Objects[cbditte.ItemIndex]);
        ExecSQL;
      end;
      //rilegge tutte le ditte e le carica nelle combo
      LoadComboDitte();
      //pulisce tutti i campi
      ClearCampi();
    end;
  end
  else
    ShowMessage('Per eliminare una ditta è necessario prima selezionarne una dalla lista.');

end;


procedure TDitte.btapriaziendeClick(Sender: TObject);
begin
  //Apro la form aziende
  Aziende := TAziende.Create(self);
  Aziende.showmodal;
  //ricarico la lista delle aziende visto che probabilmente sarà cambiata
  LoadComboAziende();
end;


procedure TDitte.cbditteChange(Sender: TObject);
begin

  if cbDitte.ItemIndex<>-1 then
  begin
       //mostro nei campi l'azienda selezionata
       with zq_ditte do
       begin
            Close;
            sql.Clear;
            sql.Add('SELECT * FROM DITTE WHERE IDDITTA=:ID');
            ParamByName('ID').AsInteger := integer(cbditte.Items.Objects[cbditte.ItemIndex]);
            ExecSQL;
            Open;
            edDescrizione.Text  := FieldByName('DESCRIZIONE').AsString;
            cbAziende.ItemIndex:= cbAziende.Items.IndexOfObject(TObject(FieldByName('IDAZIENDA').AsInteger));
       end;
  end;
end;

procedure TDitte.cbditteExit(Sender: TObject);
begin
  (sender as TComboBox).ItemIndex := (sender as TComboBox).Items.IndexOfObject(TObject((sender as TComboBox).Items.Objects[(sender as TComboBox).ItemIndex]));
  (sender as TComboBox).OnChange(self);
end;

procedure TDitte.cbditteKeyPress(Sender: TObject; var Key: char);
begin
  if key=#13 then
    SelectNext(sender as twincontrol,true,true);
end;


procedure TDitte.cbaziendeChange(Sender: TObject);
begin
     btsalva.Enabled:=True;
end;



//la procedura svuota tutti i campi delle textbox e elimina la selezione nelle combo
procedure TDitte.ClearCampi();
begin
  cbditte.ClearSelection;
  cbAziende.ClearSelection;
  edDescrizione.Clear;
  btsalva.Enabled:=False;
end;


procedure TDitte.LoadComboDitte();
begin
  cbditte.Clear;
  with zq_ditte do
  begin
    Close;
    sql.Clear;
    sql.Add('SELECT ANAGAZIENDE.NOME,DITTE.IDDITTA FROM ANAGAZIENDE ' +
      'INNER JOIN DITTE ON ANAGAZIENDE.IDAZIENDA=DITTE.IDAZIENDA');
    ExecSQL;
    Open;
    while not EOF do
    begin
      cbditte.Items.AddObject(FieldByName('NOME').AsString,TObject(FieldByName('IDDITTA').AsInteger));
      Next;
    end;
  end;
  btsalva.Enabled:=false;
end;

procedure TDitte.LoadComboAziende();
begin
  cbAziende.Clear;
  with zq_ditte do
  begin
    Close;
    sql.Clear;
    sql.Add('SELECT IDAZIENDA, NOME FROM ANAGAZIENDE');
    ExecSQL;
    Open;
    while not EOF do
    begin
      cbAziende.Items.AddObject(FieldByName('NOME').AsString,TObject(FieldByName('IDAZIENDA').AsInteger));
      Next;
    end;
  end;
end;


initialization
  {$I ditte_frm.lrs}

end.

